package paket;

import java.io.File;
import java.util.ArrayList;
import java.util.Set;
import java.util.TreeSet;
import javax.swing.ImageIcon;

/**
 *
 * @author F. Oğuz
 */
public class Knight extends Hero {

    public Knight(int aaa) {
        this.setDefaultHealth(50);
        this.setStrokePower(7);
        this.setTeam(aaa);
        this.setName("Knight");
        if (aaa == 1) {
            this.setTeamRenk("kirmizi");

            for (int i = 1; i < 20; i++) {

                this.setFile(new File("images/heroes/scout-idle-" + i + ".png"));
                this.getaImage()[i - 1] = new ImageIcon(this.getFile().getAbsolutePath()).getImage();
            }
            this.setGifRight("images/move/scout-moving.gif");
            this.setGifLeft("images/move/scout-moving-left.gif");

        } else {
            this.setTeamRenk("blue");

            for (int i = 1; i < 20; i++) {
                this.setFile(new File("images/enemy/direwolver-idle-" + i + ".png"));
                this.getaImage()[i - 1] = new ImageIcon(this.getFile().getAbsolutePath()).getImage();
            }
            this.setGifRight("images/move/direwolver-moving.gif");
            this.setGifLeft("images/move/direwolver-moving-left.gif");

        }
    }

    public int vurus(Hero vurulan) {
        if (vurulan.getName().equals("Knight")) {
            return 7;
        } else if (vurulan.getName().equals("Archer")) {
            return 9;
        } else if (vurulan.getName().equals("Lance")) {
            return 7;
        } else {
            return 8;  // Kılıç için
        }
    }

    @Override
    public void stop() {
        // Dur metodunun içeriği
    }

    @Override
    public ArrayList hamleleriDondur(paket.Hero[][] heroeses, int i, int j) {
        // İlerle metodunun içeriği
        Hero[][] heroes = new Hero[BoardPanel.ROWS][BoardPanel.COLS];
        //Hero[][] tempHero=new Hero[BoardPanel.ROWS][BoardPanel.COLS];

        Kopyalama kp = new Kopyalama();
        kp.multiArrayCopy(heroeses, heroes);
        ArrayList liste = new ArrayList();
        liste.add(paket.Hero.makeGamePad(heroes));
        // i'ler için
        if (i - 1 >= 0) {
            if (heroes[i - 1][j] == null) {

                heroes[i - 1][j] = heroes[i][j];
                heroes[i][j] = null;
                liste.add(paket.Hero.makeGamePad(heroes));
                kp.multiArrayCopy(heroeses, heroes);
                //heroes=tempHero;
            }
            if (j - 1 >= 0) {
                if (heroes[i - 1][j - 1] == null) {

                    heroes[i - 1][j - 1] = heroes[i][j];
                    heroes[i][j] = null;
                    liste.add(paket.Hero.makeGamePad(heroes));    //sol yukarı çapraz için

                    kp.multiArrayCopy(heroeses, heroes);
                    //  heroes=tempHero;

                }
            }
        }
        if (i - 2 >= 0) {   // atın 2 adım hamlesi için
            if (heroes[i - 2][j] == null) {
                heroes[i - 2][j] = heroes[i][j];
                heroes[i][j] = null;
                liste.add(paket.Hero.makeGamePad(heroes));   // 2 yukarı yukarı

                kp.multiArrayCopy(heroeses, heroes);
            }
            if (j - 2 >= 0) {
                if (heroes[i - 2][j - 2] == null) {

                    heroes[i - 2][j - 2] = heroes[i][j];
                    heroes[i][j] = null;
                    liste.add(paket.Hero.makeGamePad(heroes));   //sol yukarı çapraz 2 adım için

                    kp.multiArrayCopy(heroeses, heroes);

                }
            }
        }
        if (i + 1 <= paket.BoardPanel.ROWS - 1) {
            if (heroes[i + 1][j] == null) {

                heroes[i + 1][j] = heroes[i][j];
                heroes[i][j] = null;
                liste.add(paket.Hero.makeGamePad(heroes));  //aşağı

                kp.multiArrayCopy(heroeses, heroes);

            }
            if (j - 1 >= 0) {
                if (heroes[i + 1][j - 1] == null) {

                    heroes[i + 1][j - 1] = heroes[i][j];
                    heroes[i][j] = null;
                    liste.add(paket.Hero.makeGamePad(heroes)); //sol aşağı çapraz için

                    kp.multiArrayCopy(heroeses, heroes);

                }
            }
        }
        if (i + 2 <= paket.BoardPanel.ROWS - 1) {
            if (heroes[i + 2][j] == null) {

                heroes[i + 2][j] = heroes[i][j];
                heroes[i][j] = null;
                liste.add(paket.Hero.makeGamePad(heroes));  //aşağı 2 adım

                kp.multiArrayCopy(heroeses, heroes);
            }
            
        }
        if (j - 2 >= 0 && i + 2 <= paket.BoardPanel.ROWS - 1) {
                if (heroes[i + 2][j - 2] == null) {

                    heroes[i + 2][j - 2] = heroes[i][j];
                    heroes[i][j] = null;
                    liste.add(paket.Hero.makeGamePad(heroes)); //sol aşağı çapraz 2 adım için

                    kp.multiArrayCopy(heroeses, heroes);
                }
            }
        //j'ler için
        if (j - 1 >= 0) {
            if (heroes[i][j - 1] == null) {

                heroes[i][j - 1] = heroes[i][j];
                heroes[i][j] = null;
                liste.add(paket.Hero.makeGamePad(heroes));  //geri

                kp.multiArrayCopy(heroeses, heroes);

            }
        }

        if (j - 2 >= 0) {
            if (heroes[i][j - 2] == null) {

                heroes[i][j - 2] = heroes[i][j];
                heroes[i][j] = null;
                liste.add(paket.Hero.makeGamePad(heroes));  //geri 2 adım

                kp.multiArrayCopy(heroeses, heroes);
            }
        }

        if (j + 1 <= paket.BoardPanel.COLS - 1) {
            if (heroes[i][j + 1] == null) {

                heroes[i][j + 1] = heroes[i][j];
                heroes[i][j] = null;
                liste.add(paket.Hero.makeGamePad(heroes));  // ileri
                kp.multiArrayCopy(heroeses, heroes);
            }
            if (i - 1 >= 0) {
                if (heroes[i - 1][j + 1] == null) {

                    heroes[i - 1][j + 1] = heroes[i][j];
                    heroes[i][j] = null;
                    liste.add(paket.Hero.makeGamePad(heroes));  // sağ yıkarı çapraz
                    kp.multiArrayCopy(heroeses, heroes);
                }
            }
            if (i + 1 <= BoardPanel.ROWS - 1) {
                if (heroes[i + 1][j + 1] == null) {

                    heroes[i + 1][j + 1] = heroes[i][j];
                    heroes[i][j] = null;
                    liste.add(paket.Hero.makeGamePad(heroes)); // sağ aşağı çapraz
                    kp.multiArrayCopy(heroeses, heroes);
                }
            }
        }
        if (j + 2 <= paket.BoardPanel.COLS - 1) {
            if (heroes[i][j + 2] == null) {

                heroes[i][j + 2] = heroes[i][j];
                heroes[i][j] = null;
                liste.add(paket.Hero.makeGamePad(heroes));  // ileri 2 adım
                kp.multiArrayCopy(heroeses, heroes);
            }

            if (i - 2 >= 0) {
                if (heroes[i - 2][j + 2] == null) {

                    heroes[i - 2][j + 2] = heroes[i][j];
                    heroes[i][j] = null;
                    liste.add(paket.Hero.makeGamePad(heroes)); // sağ yıkarı çapraz 2 adım
                    kp.multiArrayCopy(heroeses, heroes);
                }
            }
            if (i + 2 <= BoardPanel.ROWS - 1) {
                if (heroes[i + 2][j + 2] == null) {

                    heroes[i + 2][j + 2] = heroes[i][j];
                    heroes[i][j] = null;
                    liste.add(paket.Hero.makeGamePad(heroes)); // sağ aşağı çapraz 2 adım
                    kp.multiArrayCopy(heroeses, heroes);
                }
            }
        }

        System.out.println("listeyi verdim");
        // listede aynı elemanlar warmı kontrol et.
        System.out.println("atlı");
        return liste;
    }

    @Override
    public int fight(Hero[][] heroes, int i, int j) {
        int hasar = 0;
        System.out.println("Knight savastayız");

        if (i - 1 >= 0) {    // üsttekine vurus          // aşağıdaki renkler sayesinde aynı takımda olup olmadığı bakılır.
            if (heroes[i - 1][j] != null) {
                if (!heroes[i - 1][j].getTeamRenk().equals(heroes[i][j].getTeamRenk())) {

                    hasar = hasar + vurus(heroes[i - 1][j]);
                    heroes[i - 1][j].setHealth(heroes[i - 1][j].getHealth() - vurus(heroes[i - 1][j]));
                }
            }
        }
        if (i - 1 >= 0 & j - 1 >= 0) {  // sol üst çapraza vurus
            if (heroes[i - 1][j - 1] != null) {
                if (!heroes[i - 1][j - 1].getTeamRenk().equals(heroes[i][j].getTeamRenk())) {
                    hasar = hasar + vurus(heroes[i - 1][j - 1]);
                    heroes[i - 1][j - 1].setHealth(heroes[i - 1][j - 1].getHealth() - vurus(heroes[i - 1][j - 1]));
                }
            }
        }
        if (j - 1 >= 0) {  // soldakine vurus
            if (heroes[i][j - 1] != null) {
                if (!heroes[i][j - 1].getTeamRenk().equals(heroes[i][j].getTeamRenk())) {
                    hasar = hasar + vurus(heroes[i][j - 1]);
                    heroes[i][j - 1].setHealth(heroes[i][j - 1].getHealth() - vurus(heroes[i][j - 1]));
                }
            }
        }


        if (j - 1 >= 0 & i + 1 <= BoardPanel.ROWS - 1) {    // sol alt çapraza vurus
            if (heroes[i + 1][j - 1] != null) {
                if (!heroes[i + 1][j - 1].getTeamRenk().equals(heroes[i][j].getTeamRenk())) {
                    hasar = hasar + vurus(heroes[i + 1][j - 1]);
                    heroes[i + 1][j - 1].setHealth(heroes[i + 1][j - 1].getHealth() - vurus(heroes[i + 1][j - 1]));
                }
            }
        }
        if (i + 1 <= BoardPanel.ROWS - 1) {  // aşağıya vurus
            if (heroes[i + 1][j] != null) {
                if (!heroes[i + 1][j].getTeamRenk().equals(heroes[i][j].getTeamRenk())) {
                    hasar = hasar + vurus(heroes[i + 1][j]);
                    heroes[i + 1][j].setHealth(heroes[i + 1][j].getHealth() - vurus(heroes[i + 1][j]));
                }
            }
        }
        if (j + 1 <= BoardPanel.COLS - 1) {  // sağ tarafına vurus
            if (heroes[i][j + 1] != null) {
                if (!heroes[i][j + 1].getTeamRenk().equals(heroes[i][j].getTeamRenk())) {
                    hasar = hasar + vurus(heroes[i][j + 1]);
                    heroes[i][j + 1].setHealth(heroes[i][j + 1].getHealth() - vurus(heroes[i][j + 1]));
                }
            }
        }
        if (i - 1 >= 0 && j + 1 <= BoardPanel.COLS - 1) {   // sağ üst çapraza vuruş
            if (heroes[i - 1][j + 1] != null) {
                if (!heroes[i - 1][j + 1].getTeamRenk().equals(heroes[i][j].getTeamRenk())) {
                    hasar = hasar + vurus(heroes[i - 1][j + 1]);
                    heroes[i - 1][j + 1].setHealth(heroes[i - 1][j + 1].getHealth() - vurus(heroes[i - 1][j + 1]));
                }
            }
        }
        if (i + 1 <= BoardPanel.ROWS - 1 && j + 1 <= BoardPanel.COLS - 1) {  // sağ alt çapraza vuruş
            if (heroes[i + 1][j + 1] != null) {
                if (!heroes[i + 1][j + 1].getTeamRenk().equals(heroes[i][j].getTeamRenk())) {
                    hasar = hasar + vurus(heroes[i + 1][j + 1]);
                    heroes[i + 1][j + 1].setHealth(heroes[i + 1][j + 1].getHealth() - vurus(heroes[i + 1][j + 1]));
                }
            }
        }
        return hasar;

    }

    @Override
    public void runAndFight() {
        // İlerle ve Savaş metodunun içeriği
    }
}
